﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace CRM.Database.Model
{
    public class DistrictsCollection : AbstractCollection
    {
        /// <summary>
        /// Коллекция
        /// </summary>
        public List<Districts> DistrictsList
        {
            get { return Entities.Districts.AsNoTracking().ToList(); }
        }


        /// <summary>
        /// Получить список по идентификатору страны
        /// </summary>
        /// <param name="countryId">Идентификатор страны</param>
        /// <returns>Список</returns>
        public List<Districts> GetDistrictsByCountryId(int countryId)
        {
            return DistrictsList.Where(c => c.IdCountry == countryId).ToList();
        }

        #region Implementation of IGetItem

        /// <summary>
        /// Получение списка элементов
        /// </summary>
        /// <returns>Список элементов</returns>
        public override List<object> GetList()
        {
            return new List<object>(DistrictsList);
        }

        /// <summary>
        /// Получение типа текущего элемента
        /// </summary>
        /// <returns></returns>
        protected override Type GetItemType()
        {
            return typeof (Districts);
        }

        /// <summary>
        /// Получение статического списка для хранения объектов
        /// </summary>
        /// <returns></returns>
        public override object GetStaticCollection()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Получение элемента из коллекции по идентификатору
        /// </summary>
        /// <param name="itemId">Идентификатор</param>
        /// <returns>Элемент</returns>
        public override object GetItemById(int itemId)
        {
            return Entities.Districts.Find(itemId);
        }

        #endregion

        #region Implementation of IAddDeleteUpdate

        /// <summary>
        /// Обновление элемента в коллекции
        /// </summary>
        /// <param name="item">Новый элемент</param>
        /// <param name="userLogin">Логин пользователя, который делает изменения</param>
        /// <returns>Результат операции</returns>
        public bool Update(object item, string userLogin)
        {
            var newDistrict = (Districts) item;
            if (newDistrict == null)
                return false;


            var District4Update = GetItemByIdFromDatabase(newDistrict.IdDistrict) as Districts;

            if (District4Update == null)
                return true;

            if (!string.IsNullOrEmpty(newDistrict.NameEn))
                District4Update.NameEn = newDistrict.NameEn;

            if (!string.IsNullOrEmpty(newDistrict.NameRu))
                District4Update.NameRu = newDistrict.NameRu;

            if (!string.IsNullOrEmpty(newDistrict.NameShortRu))
                District4Update.NameShortRu = newDistrict.NameShortRu;

            if (!string.IsNullOrEmpty(newDistrict.NameShortEn))
                District4Update.NameShortEn = newDistrict.NameShortEn;

            District4Update.IsActive = newDistrict.IsActive;

            if (newDistrict.IdCountry > 0)
                District4Update.IdCountry = newDistrict.IdCountry;

            if (newDistrict.IdDistrict > 0)
                District4Update.IdDistrict = newDistrict.IdDistrict;


            return base.Update(District4Update, userLogin);
        }

        /// <summary>
        /// Обнуление статической коллекции
        /// </summary>
        protected override void SetStaticListToNULL()
        {
            throw new NotImplementedException();
        }

        #endregion

        #region Implementation of IGetIdByName

        #endregion
    }
}